#include<iostream>
#include<algorithm>
using namespace std;
#include<vector>
#include<string>
/*
//搞笑做法
struct M_1
{
	int a;
	int b;

}s[101];

bool cmp(M_1 x, M_1 y) {
	return x.a < y.a;
}
void solve() {
	int l, m;
	cin >> l >> m;
	l = l + 1;
	for (int i = 1; i <= m; ++i) {
		cin >> s[i].a >> s[i].b;
	}
	sort(s + 1, s + m + 1, cmp);
	int begin = s[1].a;
	int end = s[1].b;

	for (int i = 1; i < m; ++i) {
		
		if (s[i].a <= s[i + 1].a && s[i].b >= s[i + 1].b) 
			continue;
		

		if (s[i].b >= s[i + 1].a && s[i].b <= s[i + 1].b) {			
			end = s[i + 1].b;
			continue;
		}
		l = l - (end - begin + 1);
		begin = s[i + 1].a;
		end = s[i + 1].b;
	}

	if (begin != 0)
		l = l - (end - begin + 1);
	cout << l;
	return;
}
*/


const int N = 1e4 + 10;
bool a[N];

void solve1() {
	int l, m;
	cin >> l >> m;
	
	int left = 0, right = 0;
	for (int i = 1; i <= m; ++i) {
		cin >> left >> right;
		for (int j = left; j <= right; ++j) {
			if (a[j] != false)
				continue;
			a[j] = true; //被拆除了
		}

	}
	int count = 0;
	for (int i = 0; i <= l; ++i) {
		if (!a[i])
			count++;
	}


	cout << count;
	return;
}

struct Student
{
	int a;
	int b;
	int c;
}s[1010];

bool judge(Student s1, Student s2) {
	if (abs(s1.a - s2.a) <= 5 && abs(s1.b - s2.b) <= 5 && abs(s1.c - s2.c) <= 5) {
		if (abs(s1.a + s1.b + s1.c - s2.a - s2.b - s2.c) <= 10)
			return true;
	}
	return false;
}


void solve2() {
	int count = 0;
	int n;
	cin >> n;
	for (int i = 1; i <= n; ++i) {
		cin >> s[i].a;
		cin >> s[i].b;
		cin >> s[i].c;
	}
	 
	for (int i = 1; i <= n; ++i) {
		for (int j = 1; j <= n; ++j) {
			if (i == j)
				continue;
			if (judge(s[i], s[j]))
				count++;
		}		
	}
	cout << count/2;
	return;
}


bool a3[21][21][21];

void solve3() {
	int w, x, h;
	cin >> w >> x >> h;
	int all_c = 0;
	int q;
	cin >> q;
	int x1, x2, y1, y2, z1, z2;
	for (int i = 0; i < q; ++i) {
		cin >> x1 >> y1 >> z1 >> x2 >> y2 >> z2;
		for (int i = x1; i <= x2; ++i) {
			for (int j = y1; j <= y2; ++j) {
				for (int k = z1; k <= z2; ++k) {
					a3[i][j][k] = true;
				}
			}
		}
	}
	for (int i = 1; i <= w; ++i) {
		for (int j = 1; j <= x; ++j) {
			for (int k = 1; k <= h; ++k) {
				if (!a3[i][j][k])
					all_c++;
			}
		}
	}
	cout << all_c;
	return;
}

void solve4() {

	// 统计各奖项的中奖次数（下标0~6对应特等奖到六等奖）
	vector<int> result(7, 0);

	int n;
	cin >> n;

	vector<int> r_price;
	for (int i = 0; i < 7; ++i) {
		int num;
		cin >> num;
		r_price.push_back(num);
	}
	int num;
	for (int i = 0; i < n; ++i) {
		int count = 0;
		for (int j = 0; j < 7; ++j) {
			cin >> num;
			if (find(r_price.begin(), r_price.end(), num) != r_price.end()) {
				count++;
			}
		}
		result[7-count]++;
	}
	for (int i = 0; i < 7; ++i) {
		cout << result[i] << " ";
	}

	

	return;
}



string s0 = "XXX..XXXXXXXX.XXXXXXXXXXXXXXXX";
string s1 = "X.X..X..X..XX.XX..X....XX.XX.X";
string s2 = "X.X..XXXXXXXXXXXXXXXX..XXXXXXX";
string s3 = "X.X..XX....X..X..XX.X..XX.X..X";
string s4 = "XXX..XXXXXXX..XXXXXXX..XXXXXXX";

string Cout0 = "";
string Cout1 = "";
string Cout2 = "";
string Cout3 = "";
string Cout4 = "";

void shuchu(int x) {
	Cout0 = Cout0 + s0.substr(0 + x * 3, 3) + ".";
	Cout1 = Cout1 + s1.substr(0 + x * 3, 3) + ".";
	Cout2 = Cout2 + s2.substr(0 + x * 3, 3) + ".";
	Cout3 = Cout3 + s3.substr(0 + x * 3, 3) + ".";
	Cout4 = Cout4 + s4.substr(0 + x * 3, 3) + ".";

	/*
	if (a[x] == 0) {
		Cout0 += s0.substr(0, 3);
		Cout1 += s1.substr(0, 3);
		Cout2 += s2.substr(0, 3);
		Cout3 += s3.substr(0, 3);
		Cout4 += s4.substr(0, 3);
	}
	if (a[x] == 1) {
		Cout0 += s0.substr(3, 3);
		Cout1 += s1.substr(3, 3);
		Cout2 += s2.substr(3, 3);
		Cout3 += s3.substr(3, 3);
		Cout4 += s4.substr(3, 3);
	}
	if (a[x] == 2) {
		Cout0 += s0.substr(6, 3);
		Cout1 += s1.substr(6, 3);
		Cout2 += s2.substr(6, 3);
		Cout3 += s3.substr(6, 3);
		Cout4 += s4.substr(6, 3);
	}
	if (a[x] == 3) {
		Cout0 += s0.substr(9, 3);
		Cout1 += s1.substr(9, 3);
		Cout2 += s2.substr(9, 3);
		Cout3 += s3.substr(9, 3);
		Cout4 += s4.substr(9, 3);
	}
	if (a[x] == 4) {
		Cout0 += s0.substr(12, 3);
		Cout1 += s1.substr(12, 3);
		Cout2 += s2.substr(12, 3);
		Cout3 += s3.substr(12, 3);
		Cout4 += s4.substr(12, 3);
	}
	if (a[x] == 5) {
		Cout0 += s0.substr(15, 3);
		Cout1 += s1.substr(15, 3);
		Cout2 += s2.substr(15, 3);
		Cout3 += s3.substr(15, 3);
		Cout4 += s4.substr(15, 3);
	}
	if (a[x] == 6) {
		Cout0 += s0.substr(18, 3);
		Cout1 += s1.substr(18, 3);
		Cout2 += s2.substr(18, 3);
		Cout3 += s3.substr(18, 3);
		Cout4 += s4.substr(18, 3);
	}
	if (a[x] == 7) {
		Cout0 += s0.substr(21, 3);
		Cout1 += s1.substr(21, 3);
		Cout2 += s2.substr(21, 3);
		Cout3 += s3.substr(21, 3);
		Cout4 += s4.substr(21, 3);
	}
	if (a[x] == 8) {
		Cout0 += s0.substr(24, 3);
		Cout1 += s1.substr(24, 3);
		Cout2 += s2.substr(24, 3);
		Cout3 += s3.substr(24, 3);
		Cout4 += s4.substr(24, 3);
	}
	if (a[x] == 9) {
		Cout0 += s0.substr(27, 3);
		Cout1 += s1.substr(27, 3);
		Cout2 += s2.substr(27, 3);
		Cout3 += s3.substr(27, 3);
		Cout4 += s4.substr(27, 3);
	}
	*/

	return;
}

int a5[101];
void solve5() {
	int n;
	cin >> n;

	string receive5;
	cin >> receive5;

	for (int i = 0; i < n; ++i) {
		shuchu(receive5[i]-'0');
	}
	Cout0.pop_back();
	Cout1.pop_back();
	Cout2.pop_back();
	Cout3.pop_back();
	Cout4.pop_back();
	cout << Cout0 << '\n';
	cout << Cout1 << '\n';
	cout << Cout2 << '\n';
	cout << Cout3 << '\n';
	cout << Cout4 << '\n';

	return;
}


void solve6() {
	vector<int> result(10, 0);
	int m, n;
	cin >> m >> n;
	for (int i = m; i <= n; ++i) {
		string tmp = to_string(i);
		for (int j = 0; j < tmp.size(); ++j) {
			result[tmp[j] - '0']++;
		}
	}
	for (int i = 0; i < 10; ++i) {
		cout << result[i] << " ";
	}
	return;
}

int main() {

	//solve1();
	//solve2();
	//solve3();
	//solve4();
	//solve5();
	solve6();

	return 0;

}